package com.cy.pj.sys.service.impl;

import com.cy.pj.common.bo.PageObject;
import com.cy.pj.common.exception.ServiceException;
import com.cy.pj.common.pojo.SysLog;
import com.cy.pj.sys.dao.SysLogDao;
import com.cy.pj.sys.service.SysLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author Cx
 * @stage secondStageOfWeb
 * @creat 2020-11-14 14:25
 */
@Service
public class SysLogServiceImpl implements SysLogService {

    @Autowired(required = false)
    private SysLogDao sysLogDao;

    @Override
    public PageObject<SysLog> findPageObjects(String username, Integer pageCurrent) {
        /**
         * 验证参数合法性
         * 验证pageCurrent的合法性
         * 不合法抛出IllegalArgumentException异常
         */
        if (pageCurrent == null || pageCurrent < 1) throw new IllegalArgumentException("当前页码不正确");
        /**
         * 基于条件查询总记录数
         * 执行查询
         */
        int rowCount = sysLogDao.getRowCount(username);
        /* 验证查询结果，假如结果为0不再执行如下操作 */
        if (rowCount == 0) throw new ServiceException("系统没有查到对应记录");
        /**
         * 基于条件查询当前页记录(pageSize定义为 2)
         * 定义pageSize
         */
        int pageSize = 2;
        /* 计算startIndex */
        int startIndex = (pageCurrent - 1) * pageSize;
        /* 执行当前数据的查询操作 */
        List<SysLog> records = sysLogDao.findPageObjects(username, startIndex, pageSize);
        /**
         * 对分页信息以及当前页记录进行封装
         * 构建PageObject对象
         */
        PageObject<SysLog> pageObject = new PageObject<>();
        /* 封装数据 */
        pageObject.setPageCurrent(pageCurrent);
        pageObject.setPageSize(pageSize);
        pageObject.setRowCount(rowCount);
        pageObject.setRecords(records);
        pageObject.setPageCount((rowCount - 1) / pageSize + 1);
        /* 返回封装结果 */
        return pageObject;
    }

    @Override /* 实现类中添加删除业务的具体实现 */
    public int deleteObjects(Integer... ids) {
        if (ids == null || ids.length == 0) throw new IllegalArgumentException("请至少选中一个"); /* 判定参数合法性 */
        int rows;
        try {
            rows = sysLogDao.deleteObjects(ids); /* 执行删除操作 */
        } catch (Throwable e) {
            e.printStackTrace(); /* 发出警报信息 */
            throw new ServiceException("系统故障 正在恢复中...");
        }
        if (rows == 0) throw new ServiceException("记录可能已经不存在"); /* 对结果进行验证 */
        return rows; /* 返回结果 */
    }

    @Override /* 保存日志的方法实现 */
    public void saveObject(SysLog entity) {
        sysLogDao.insertObject(entity);
    }

}
